From: Florian Müllner Date: Thu, 12 Aug 2021 00:47:23 +0000 (+0200) Subject: appMenu: Only show 'Quit' for running apps X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~574^2^2~104 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=321e07c3c6be5339e1df50218a8cf031915f8add;p=gnome-shell.git appMenu: Only show 'Quit' for running apps The top bar menu always corresponds to a running app, so it made sense to include the 'Quit' item unconditionally. That won't be the case for the overview context menus, so handle app state changes and show/hide the item as necessary. Part-of: --- diff --git a/js/ui/appMenu.js b/js/ui/appMenu.js index afd04d4b8..7f25566e0 100644 --- a/js/ui/appMenu.js +++ b/js/ui/appMenu.js @@ -71,17 +71,34 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu { this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - this.addAction(_('Quit'), () => this._app.request_quit()); + this._quitItem = + this.addAction(_('Quit'), () => this._app.request_quit()); this._signals = []; this._signals.push([ this._appSystem, this._appSystem.connect('installed-changed', () => this._updateDetailsVisibility()), + ], [ + this._appSystem, + this._appSystem.connect('app-state-changed', + this._onAppStateChanged.bind(this)), ]); + this._updateQuitItem(); this._updateDetailsVisibility(); } + _onAppStateChanged(sys, app) { + if (this._app !== app) + return; + + this._updateQuitItem(); + } + + _updateQuitItem() { + this._quitItem.visible = this._app?.state === Shell.AppState.RUNNING; + } + _updateDetailsVisibility() { const sw = this._appSystem.lookup_app('org.gnome.Software.desktop'); this._detailsItem.visible = sw !== null; @@ -149,6 +166,7 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu { this._newWindowItem.visible = app && app.can_open_new_window() && !actions.includes('new-window'); + this._updateQuitItem(); } _queueUpdateWindowsSection() {